import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
  //私有属性 _token和_key
  String? _token;
  final _key = 'enjoy-plus-key';

//创建一个全局单例对象
//1.使用_instance 变量来存储类的唯一实例
//2.通过私有构造函数 TokenManager._insternal()确保外部不能直接创建实例
//3.factory TokenManager() 工厂方法用于检查 _instance 是否已初始化
// 若未初始化则创建实例并复杂,最后返回_instance!
  //私有实例对象
  static TokenManager? _instance;
  //自定义构造函数-返回一个TokenManager类的实例对象
  TokenManager._internal();

  //默认的构造函数-可以省略不写
  //执行时机,外部创建实例-自动执行
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }

  //获取token
  Future init() async {
    //获取数据仓库实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    //读取token并赋值
    _token = prefs.getString(_key);
  }

  //存储token
  Future setToken(String token) async {
    _token = token;
    //获取数据仓库实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString(_key, token);
  }

  //同步获取token
  String? getToken() {
    return _token;
  }

  //删除token
  Future removeToken() async {
    _token = null;
    //获取数据仓库实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.remove(_key);
  }
}
//创建实例对象=>创建了一个对象=>在堆内存中开辟了一个空间进行存储
// //A页面
// const token1=TokenManager();

// //B页面

//const token2=TokenManager();
